import time

import requests

from api.reg_log_api import RegLoginApi
import pytest

from common.util import common_assert, clear_user_info, read_json


class TestRegLogin(object):
    #测试数据初始化
    def setup_class(self):
        clear_user_info()
    #代码优化
    def setup(self):
        # 1.创建session对象
        self.ses = requests.session()
        # 2.实例化封装接口请求的类，获取类的对象
        self.reg_login_api = RegLoginApi(self.ses)

    # 获取图片验证码测试用例
    @pytest.mark.parametrize('r,exp_status_code',read_json('reg_login_data','img_verify_code'))
    def test01_img_verify_code(self,r,exp_status_code):

        # 3.调用实例化类的对象，获取封装注册图片验证码接口请求的方法，拿到该接口的响应数据
        resp=self.reg_login_api.get_img_verify_code(r)
        assert exp_status_code == resp.status_code
        # 4.断言


    # 获取短信验证码测试用例
    @pytest.mark.parametrize('phone,img_verify_code,exp_status_code,exp_deseription',
                             read_json('reg_login_data','phone_verify_code'))
    def test02_phone_verify_code(self,phone,img_verify_code,exp_status_code,exp_deseription):

        # 3.调用实例化类的对象，实现获取注册图片验证码接口请求
        self.reg_login_api.get_img_verify_code(123332123123)
        # 4.调用实例化类的对象，实现获取注册短信验证码接口请求，拿到该接口的响应数据
        resp=self.reg_login_api.get_phone_verify_code(phone,img_verify_code,'reg')

        common_assert(resp,exp_status_code,exp_deseription)


    #注册测试用例
    @pytest.mark.parametrize('form_dict,exp_status,desceiption'
                             ,read_json('reg_login_data','user_register'))
    def test03_register(self,form_dict,exp_status,desceiption):
        # 1.实现获取注册图片验证码接口

        self.reg_login_api.get_img_verify_code(123332123123)
        # 2.实现获取注册短信验证码接口
        resp=self.reg_login_api.get_phone_verify_code(form_dict.get('phone'),'8888')
        # 3.调用封装注册接口请求的方法，获取响应数据'

        resp=self.reg_login_api.user_register(form_dict)

        common_assert(resp, exp_status, desceiption)
    # 登录测试用例
    @pytest.mark.parametrize('moble,password,exp_status,description',read_json('reg_login_data','user_login'))
    def test04_user_login(self,moble,password,exp_status,description):
        # 1.调用封装登录接口请求的方法，获取响应数据
        resp=self.reg_login_api.user_login(moble,password)
        resp_dict=resp.json()

        common_assert(resp, exp_status, description)

    def test05_user_login_error(self):
        # 1.调用封装登录接口请求的方法，登录1次失败
        resp=self.reg_login_api.user_login('18743264322','123')
        common_assert(resp,100,'密码错误1次')
        # 2.调用封装登录接口请求的方法，登录2次失败
        resp1 = self.reg_login_api.user_login('18743264322', '123')
        common_assert(resp1,100,'密码错误2次')
        # 3.调用封装登录接口请求的方法，登录3次失败锁定
        resp2 = self.reg_login_api.user_login('18743264322', '123')
        common_assert(resp2,100,"锁定")
        time.sleep(70)
         # .调用封装登录接口请求的方法，登录4次成功
        resp3 = self.reg_login_api.user_login('18743264322', 'qqq123')

        common_assert(resp3,200,"成功")
